package com.aloda.ojuser.service;

import com.aloda.ojcommon.domain.result.PageResult;
import com.aloda.ojuser.pojo.dto.UserAddDTO;
import com.aloda.ojuser.pojo.dto.UserEditDTO;
import com.aloda.ojuser.pojo.dto.UserLoginDTO;
import com.aloda.ojuser.pojo.dto.UserPageDTO;
import com.aloda.ojuser.pojo.entity.User;
import com.aloda.ojuser.pojo.vo.UserLoginVO;
import com.aloda.ojuser.pojo.vo.UserOnlineVO;
import com.aloda.ojuser.pojo.vo.UserPageVO;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
* @author aloda
* @description 针对表【user(用户表)】的数据库操作Service
* @createDate 2025-04-19 10:28:53
*/
public interface UserService extends IService<User> {

    /**
     * 用户通过邮箱登录
     * @param userLoginDTO
     * @return
     */
    UserLoginVO loginByEmail(UserLoginDTO userLoginDTO);

    /**
     * 分页查询用户
     * @param userPageDTO
     * @return
     */
    PageResult<UserPageVO> pageQuery(UserPageDTO userPageDTO);

    /**
     * 新增用户
     * @param userAddDTO
     * @return
     */
    Long addUser(UserAddDTO userAddDTO);

    /**
     * 编辑用户
     * @param userEditDTO
     */
    void editUser(UserEditDTO userEditDTO);

    /**
     * 用户退出
     * @param request
     */
    void userLogout(HttpServletRequest request);

    /**
     * 获取所有在线用户
     * @return
     */
    List<UserOnlineVO> getAllOnlineUser();

    /**
     * 下线用户
     * @param token
     */
    void offlineUser(String token);

    /**
     * 批量删除用户
     * @param ids
     */
    void deleteUserByIds(List<Long> ids);
}
